package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	//ReadAtLeast 从 r 读取到 buf 中，直到读取至少 min 字节。 如果读取的字节数较少，则返回复制的字节数和错误。
	//仅当未读取字节时，错误才为 EOF。 如果在读取少于 min 字节后发生 EOF，ReadAtLeast 将返回 ErrUnexpectedEOF。
	//如果 min 大于 buf 的长度，ReadAtLeast 将返回 ErrShortBuffer。 返回时，n >= min 当且仅当 err == nil。
	//如果 r 返回读取至少 min 个字节的错误，则删除该错误。

	r := strings.NewReader("some io.Reader stream to be read\n")

	buf := make([]byte, 14)

	io.ReadAtLeast(r, buf, 4)
	fmt.Printf("%s\n", buf)

	shortBuf := make([]byte, 3)
	if _, err := io.ReadAtLeast(r, shortBuf, 4); err != nil {
		//error: short buffer
		fmt.Println("error:", err)
	}

	// minimal read size bigger than io.Reader stream
	longBuf := make([]byte, 64)
	if _, err := io.ReadAtLeast(r, longBuf, 64); err != nil {
		//error: unexpected EOF
		fmt.Println("error:", err)
	}
}
